<?php
namespace globalunit\utils;

use globalunit\utils\Utils;
use QYS\Db\Mysql;
use QYS\Log\Log;

class DBClass
{
    private static $prefix = 's_';//表前缀
    /**
     * 组合表名
     * @param $db string 数据库名字
     * @return string 完整表名
     */
    private static function db($db){
        if(empty(self::$prefix)){
            return $db;
        }
        return $db = self::$prefix.$db;
    }

    /**
     * 修改sql
     * @param $db string 数据库名字
     * @param $column string
     * @param $value string
     * @return string sql语句
     */
    private static function addSql($db, $column, $value) {
        $sql = "INSERT INTO {$db} ($column) VALUE ($value)";
        return $sql;
    }

    /**
     * 修改
     * @param $mysql object Mysql
     * @param $db string 数据库名字
     * @param $column string
     * @param $value string
     * @return bool
     */
    public static function add($mysql, $db, $column, $value){
        $sql = self::addSql($db, $column, $column);
        return $mysql->query($sql);
    }

    /**
     * 查询sql
     * @param $db string 数据库名字
     * @param $where string 查询条件
     * @param $orderBy string 排序字段
     * @param $limit integer 限制
     * @param $page integer 页数
     * @param $field string 字段
     * @return string sql语句
     */
    private static function querySql($db, $where, $orderBy = "", $limit = 0, $page = 1, $field = "*") {
        $sql = "select {$field} from {$db}";
        if(!empty($where)){
            $sql .= " where {$where}";
        }
        if(!empty($orderBy)){
            $sql .= " order by {$orderBy}";
        }
        if(!empty($limit)){
            $start = ($page - 1) * $limit; //从哪里开始
            $sql .= " limit {$start}, {$limit}";
        }
        return $sql;
    }

    /**
     * 查询单条记录
     * @param $mysql object Mysql
     * @param $db string 数据库名字
     * @param $where string 查询条件
     * @param $field string 字段
     * @return array
     */
    public static function findOne($mysql, $db, $where, $field = "*"){
        $sql = self::querySql($db, $where, "", 0, 1, $field);
        $result = $mysql->query($sql);
        $a = [];
        if($result === false){
            return $a;
        }
        return $result->fetch_assoc();
    }

    /**
     * 查询多条记录
     * @param $mysql object Mysql
     * @param $db string 数据库名字
     * @param $where string 查询条件
     * @param $orderBy string 排序字段
     * @param $limit integer 限制
     * @param $page integer 页数
     * @param $field string 字段
     * @return array
     */
    public static function find($mysql, $db, $where = "", $orderBy = "", $limit = 0, $page = 1, $field = "*"){
        $sql = self::querySql($db, $where, $orderBy, $limit, $page, $field);
        Log::dump(['s' => $sql]);
        $result = $mysql->query($sql);
        $a = [];
        if($result === false){
            return $a;
        }
        return $result->fetch_all(MYSQLI_ASSOC);
    }

    /**
     * 修改sql
     * @param $db string 数据库名字
     * @param $set string 修改内容
     * @param $where string 条件
     * @return string sql语句
     */
    private static function saveSql($db, $set, $where = '') {
        $sql = "UPDATE {$db} SET {$set}";
        if(!empty($where)){
            $sql .= " where {$where}";
        }
        return $sql;
    }

    /**
     * 修改
     * @param $mysql object Mysql
     * @param $db string 数据库名字
     * @param $set string 修改内容
     * @param $where string 条件
     * @return bool
     */
    public static function save($mysql, $db, $set, $where = ''){
        $sql = self::saveSql($db, $set, $where);
        $mysql->query($sql);
        $row = $mysql->affected_rows;
        return $row;
    }

    /**
     * 删除sql
     * @param $db string 数据库名字
     * @param $where string 查询条件
     * @return string sql语句
     */
    private static function delSql($db, $where) {
        $sql = "delete from {$db}";
        if(!empty($where)){
            $sql .= " where {$where}";
        }
        return $sql;
    }
    /**
     * 删除记录
     * @param $mysql object Mysql
     * @param $db string 数据库名字
     * @param $where string 条件
     * @return bool
     */
    public static function del($mysql, $db, $where = ''){
        $sql = self::delSql($db, $where);
        return $mysql->query($sql);
    }

}
